% 设置问题参数
N_t = 10; % N_t 的值，根据你的问题设置
w_hat_J = randn(N_t, 1); % 随机生成 w_hat_J
f_BJ = randn(N_t, 1); % 随机生成 f_BJ

% 初始化 Riemannian manifold 结构
manifold = grassmannfactory(N_t, N_t); % 在 Grassmann 流形上执行优化

% 定义问题描述
problem.M = manifold;

% 定义目标函数
problem.cost = @(F_RJ) norm(w_hat_J - kron(f_BJ.', eye(N_t)) * F_RJ(:))^2;   % N_t * N_t^2  \times  N_t^2 * 1 

% 设置优化器选项
options.maxiter = 100; % 最大迭代次数
options.tolgradnorm = 1e-6; % 梯度范数的容忍度

% 随机生成初始点
X0 = problem.M.rand();

% 使用 Manopt 进行 Riemannian manifold 优化
X_opt = trustregions(problem, X0, options);

% 从优化结果中重构 F_RJ
F_RJ_opt = reshape(X_opt, N_t, N_t);

% 显示最优解
disp('Optimal F_RJ:');
disp(F_RJ_opt);

